package network;

import java.util.Observable;

import javax.swing.JOptionPane;

import data.Alerte;
import data.Authentification;
import data.Chat;
import data.Indice;
import data.Log;
import data.ModeleDynamiqueObjet;
import data.ModeleDynamiqueObjetIndice;
import data.Temps;
import data.Utilisateur;
import database.ConnexionDB;

public class Protocol {
	
	Chat chat;
	Authentification auth;
	Log log;
	ModeleDynamiqueObjetIndice mdi;
	
	public Protocol(Authentification auth, Chat chat, Log log) {
		this.chat=chat;
		this.auth = auth;
		this.log = log;
	}
	
	public void parse(Object o) {
		if(o.getClass().equals(String.class)){
			// Chat message
			//System.out.println("Chat line received: "+  o);
			chat.addLine("["+auth.getUtilisateur().getPseudoUtilisateur()+"] "+(String) o);
		}
		else if(o.getClass().equals(Utilisateur.class)) {
			/** Demande de connexion */
			Utilisateur u = (Utilisateur) o;
			if(u.getPseudoUtilisateur().equals("Anonyme")){
				log.addLine("[+] Deconnexion Utilisateur: " + auth.getUtilisateur().getPseudoUtilisateur());
				auth.setAnon();
			}
			else{
				log.addLine("[+] Demande Connexion Utilisateur: " + u.getPseudoUtilisateur());
				auth.authentifie(u);
			}
		}
		else if(o.getClass() == Indice.class) {
			
			Indice ind1 = (Indice)o;
			Utilisateur u = auth.getUtilisateur();
			
		    int result = JOptionPane.showConfirmDialog( null,"Le joueur '"+u.getPseudoUtilisateur()+"' souhaite obtenir l'indice '"+ind1.getLabelIndice()+"' contre "+ind1.getCoutIndice()+"mins","Demande d'indice", JOptionPane.YES_NO_OPTION
);
	
			if (result == 0)
			{
				
				//ModeleDynamiqueObjet.enleverTemps(u.getIdUtilisateur(),ind1.getCoutIndice());
				System.out.println("[Admin][proto] Chargement user:"+auth.getUtilisateur().getPseudoUtilisateur()+ "chrono: "+ auth.getUtilisateur().getChronoUtilisateur());
				ModeleDynamiqueObjetIndice.envoyerIndice(ind1.getIdIndice(), u.getIdUtilisateur());
				
				auth.setChronoUser(new Temps(auth.getUtilisateur().getChronoUtilisateur() - (ind1.getCoutIndice()*60)));
				log.addLine("Le joueur '"+u.getPseudoUtilisateur()+" a echange l'indice '"+ind1.getLabelIndice()+"' contre "+ind1.getCoutIndice()+"mins" );
				//auth.setAnon();
				System.out.println("[Admin][proto] Rechargement user:"+u.getPseudoUtilisateur()+ " chrono: "+ u.getChronoUtilisateur());
				//auth.setUtilisateur(u);
				
			}
			/* TODO Ajouter une alerte pour donner la r�ponse � l'utilisateur */ 
			
		}
		else if(o.getClass() == DemandeIndice.class) {
		
		}
		else if(o.getClass() == Temps.class) {
			if(auth.getState()){
				// set user chrono
				if(((Temps)o).conversion() > auth.getUtilisateur().getChronoUtilisateur())
				{
					//impossible
				}
				else
				{
					auth.setChronoUser((Temps) o);
				}
				//System.out.println("[Client][proto] Mise a jour du chrono de l'user: "+auth.getUtilisateur().getPseudoUtilisateur());
			}
		}
	}
}

class EchangeIndice {
	// Echange un indice avec un joueur contre du temps
}

class DemandeIndice {
	// Demande un indice disponible contre du temps
}

